<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

/**
 * //Controlador de ABM de Personas
 *  
 */
class ABM_Personas extends CI_Controller {
    function __construct() {
        parent::__construct();
                
        //Si el usuario no está logueado redirijo al modulo de login.
        if(!$this->autenticacion->logueado()){
            redirect('admin/usuarios');
        }
        
        //ZONA DE CARGA DE HELPERS Y MODELOS
        $this->load->helper('form');
        $this->load->helper('html');
        $this->load->model('Personas_Model');
        $this->load->model('Tipos_Doc_Model');
        $this->load->library('grocery_CRUD');	
         
        //ZONA DE INICIALIZACIÓN DE VARIABLES
        $this->encabezado['usuario']=  $this->session->userdata('usuario');
        $this->menu['menu']='personas';
        $this->menu['submenu']='personas';
    }
    /*La función index muestra listado de personas y opciones para editar e
     * ingresar una nueva.
     */
    function index(){
        $this->abm();
    }
    
    function abm(){
        //Creo el objeto crud
        $crud = new grocery_CRUD();

        //Defino Template como datatables.
        //$crud->set_theme('datatables');

        //Defino tabla sobre la que trabajo y tipo de 'Objeto'
        $crud->set_table('Personas');
        $crud->set_subject('Persona');
        
        //Quito el botones borrar.
        $crud->unset_delete();
        
        //Agrego la acción para ver los detalles del curso.
        $crud->add_action('Ver detalles', base_url().'assets/grocery_crud/themes/flexigrid/css/images/magnifier.png', 'admin/abm_personas/detalles_persona','');
        
        //Defino Relaciones 1-n
        $crud->set_relation('idTipoDoc', 'TiposDoc', 'descripcion');

        //Seteo Reglas para campos
        $crud->set_rules('email', 'Email', 'valid_email');
        
        //Seteo campos requeridos
        $crud->required_fields('nombre', 'apellido', 'idTipoDoc', 'nroDoc');
        
        //Defino nombres para cada campo.
        $crud->display_as('nombre', 'Nombre');
        $crud->display_as('apellido', 'Apellido');
        $crud->display_as('idTipoDoc', 'Tipo de Documento');
        $crud->display_as('nroDoc', 'N&uacute;mero de Documento');
        $crud->display_as('domicilio', 'Domicilio');
        $crud->display_as('telefono', 'Tel&eacute;fono');
        $crud->display_as('celular', 'Celular');
        $crud->display_as('email', 'Email');
        
        //Hago 'callbacks' para transformar datos antes de inserción/actualización.
        //$crud->callback_before_insert(array($this, '_transformar_htmlentities'));
        //$crud->callback_before_update(array($this, '_transformar_htmlentities'));
        $crud->callback_after_insert(array($this, '_callback_insercion'));
        $crud->callback_after_update(array($this, '_callback_edicion'));
        
        //Genero el ABM
        $output=$crud->render();

        //Llamo a la función encargada de mostrar el ABM.
        $this->mostrar_crud($output);
    }
    
    private function mostrar_crud($output = null, $vista='abm_view', $data = NULL) {   
        
        $this->encabezado['abm']=TRUE;
        $this->encabezado['js_files']=$output->js_files;
        $this->encabezado['css_files']=$output->css_files;
        
        $this->load->view('admin/template/encabezado', $this->encabezado);
        $this->load->view('admin/template/menu', $this->menu);
        $this->load->view("admin/abm_personas/$vista", $data);
        $this->load->view('admin/crud/crud_view',$output);	
        $this->load->view('admin/template/footer');
	}

    function _transformar_htmlentities(){
        $post_array=$this->input->post();
        
        //Convierto a 'acute' los campos necesarios.
        $post_array['nombre']=htmlentities($post_array['nombre']);
        $post_array['apellido']=htmlentities($post_array['apellido']);
        $post_array['domicilio']=htmlentities($post_array['domicilio']);
        
        return $post_array;
    }
    
    function detalles_persona($idPersona){
        //Recupero los datos de la persona a mostrar.
        $data['persona'] = $this->Personas_Model->getPersona($idPersona);
        
        //Recupero Tipo Dni de la Persona.
        $data['tipoDoc'] = $this->Tipos_Doc_Model->get_tipo_doc_id($data['persona']['idTipoDoc']);
        
        //Recupero la matricula para el año en curso.
        $data['matricula'] = $this->Personas_Model->matriculado_anio($idPersona, date('Y'));
        
        
        //Defino que voy a necesitar el shadowbox
        $this->encabezado['shadowbox']=TRUE;
        
        //Cargo vistas
        $this->load->view('admin/template/encabezado', $this->encabezado);
        $this->load->view('admin/template/menu', $this->menu);
        $this->load->view("admin/abm_personas/detalles_persona_view", $data);
        $this->load->view('admin/template/footer');
    }
    
    function matriculas($idPersona){
        //Creo el objeto crud
        $crud = new grocery_CRUD();

        //Defino Template como datatables.
        //$crud->set_theme('datatables');

        //Defino tabla sobre la que trabajo y tipo de 'Objeto'
        $crud->set_table('Matriculas');
        $crud->set_subject('Matr&iacute;cula');
        $crud->where('idPersona', $idPersona);
        $crud->order_by('anio', 'desc');
        //Quito el botones.
        //$crud->unset_add();
        //$crud->unset_edit();
        //$crud->unset_delete();

        $crud->set_rules('promocion', 'Promoci&oacute;n', 'is_natural');
        
        //Defino nombres para cada campo.
        $crud->display_as('idPersona', 'Persona');
        $crud->display_as('anio', 'A&ntilde;o');
        $crud->display_as('matriculado', 'Matriculado');
        $crud->display_as('promocion', 'Promoci&oacute;n');
        
        $crud->change_field_type('idPersona', 'hidden', $idPersona);
        $crud->columns('anio', 'matriculado', 'promocion');
        
        //Hago 'callbacks' para transformar datos antes de inserción/actualización.
//        $crud->callback_before_insert(array($this, '_transformar_htmlentities'));
//        $crud->callback_before_update(array($this, '_transformar_htmlentities'));
//        
        //Genero el ABM
        $output=$crud->render();
        
        $persona=$this->Personas_Model->getPersona($idPersona);
        $output->titulo_crud="Matr&iacute;culas de ".$persona['nombre']." ".$persona['apellido'];
        $this->mini_crud($output);
    }
    
    private function mini_crud($output){
        $this->load->view('admin/crud/mini_crud_view',$output);	
    }
    
    function _callback_insercion($post_array, $primary_key){
        //Inserto el registro
        $registro="Insertó persona id: $primary_key";
        $this->registro_actividad->cargar_registro($this->session->userdata('id'), $registro);
    }
    
    function _callback_edicion($post_array, $primary_key){
        //Inserto el registro
        $registro="Editó persona id: $primary_key";
        $this->registro_actividad->cargar_registro($this->session->userdata('id'), $registro);
    }
}

/* End of file abm_personas.php */
/* Location: ./application/controllers/abm_personas.php */